<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    function getRandWithTime(){
      setTimeout(function(){
        return Math.floor(Math.random()*10)
      },2000)
    }
    var result = getRandWithTime()
    console.log(result);  // undefiend
    // 原因就在于 setTimeout() 是一个新的函数,并不是getRandWithTime()这个函数
    // 所以他不会返回到getRandWithTime的调用处
    // 想要解决这个问题,就需要使用到回调函数
    // 1.在上面的函数中--声明形参 - fn
    function getRandTime(fn){
      setTimeout(function(){
        // 这里面因为return不出去,使用fn回调函数来执行,而且可以在调用的同时完成传值
        fn(Math.floor(Math.random()*10))
      },1000) // 一秒之后,产生随机数
    }
    // 在调用getRandTime的同时,给fn 传入一个匿名函数体,同时接收结果
    // 这里的result相当于就是 Math.floor(Math.random()*10)的运行结果
    // 是整个匿名函数的形参 就是拿目标函数内部函数setTimeout的运行结果
    // 作为匿名函数fn的形参，这个fn是一个形参，实际参数就是
    // function(result){
    //   console.log(result);
    //   }
    // 这个匿名函数
    getRandTime(function(result){
      console.log(result);
    })

    function gettime(fn){
      fn(Math.floor(Math.random()*10))
    }
    gettime(function(s){
      console.log(s);
    })
  </script>
</body>
</html>